common.skill

স্ট্রাকচার এবং ইউনিয়ন

Computer Programming - সি++ প্রোগ্রামিং (C++ Programming)
263
263

স্ট্রাকচার (Structure) এবং ইউনিয়ন (Union) হলো C++ প্রোগ্রামিং ভাষায় ব্যবহৃত দুটি ডেটা স্ট্রাকচার, যা একাধিক ভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। তবে এদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, যা তাদের ব্যবহারের উদ্দেশ্য এবং কার্যকারিতা পৃথক করে।


স্ট্রাকচার (Structure)

স্ট্রাকচার হলো একটি ডেটা স্ট্রাকচার, যা বিভিন্ন ধরনের ডেটা মেম্বার ধারণ করতে পারে। স্ট্রাকচার ডেটা মেম্বারগুলোকে তাদের নিজস্ব মেমোরি লোকেশন বরাদ্দ করে, ফলে প্রতিটি মেম্বারের নিজস্ব মেমোরি থাকে।

স্ট্রাকচার ঘোষণা

struct StructureName {
    data_type member1;
    data_type member2;
    // অন্যান্য মেম্বার
};

উদাহরণ: স্ট্রাকচার

#include <iostream>
using namespace std;

// Student নামক একটি স্ট্রাকচার ঘোষণা করা
struct Student {
    int id;
    string name;
    float marks;
};

int main() {
    // Student স্ট্রাকচারের একটি অবজেক্ট তৈরি করা
    Student student1;

    // মেম্বার সেট করা
    student1.id = 101;
    student1.name = "John";
    student1.marks = 85.5;

    // মেম্বার প্রিন্ট করা
    cout << "ID: " << student1.id << endl;
    cout << "Name: " << student1.name << endl;
    cout << "Marks: " << student1.marks << endl;

    return 0;
}

বর্ণনা:

  • এখানে Student নামে একটি স্ট্রাকচার তৈরি করা হয়েছে, যার মধ্যে id, name, এবং marks নামে তিনটি মেম্বার রয়েছে।
  • প্রতিটি মেম্বারের নিজস্ব মেমোরি লোকেশন থাকে, তাই id, name, এবং marks এর ভিন্ন মান ধারণ করা সম্ভব।

স্ট্রাকচারের বৈশিষ্ট্য

  1. একাধিক ডেটা টাইপ: স্ট্রাকচারে বিভিন্ন ধরনের ডেটা মেম্বার সংরক্ষণ করা যায়।
  2. প্রত্যেক মেম্বারের নিজস্ব মেমোরি লোকেশন: প্রতিটি মেম্বারের নিজস্ব মেমোরি বরাদ্দ থাকে।
  3. প্রয়োজন অনুসারে আকার: স্ট্রাকচারের আকার সমস্ত মেম্বারের মেমোরির যোগফলের সমান হয়।

ইউনিয়ন (Union)

ইউনিয়ন হলো এমন একটি ডেটা স্ট্রাকচার, যা একাধিক মেম্বার ধারণ করতে পারে তবে একই সময়ে শুধুমাত্র একটি মেম্বারকে মেমোরি বরাদ্দ করে। অর্থাৎ, ইউনিয়নের মধ্যে সবচেয়ে বড় মেম্বারের জন্য পর্যাপ্ত মেমোরি বরাদ্দ হয় এবং সব মেম্বার সেই মেমোরি ভাগাভাগি করে ব্যবহার করে।

ইউনিয়ন ঘোষণা

union UnionName {
    data_type member1;
    data_type member2;
    // অন্যান্য মেম্বার
};

উদাহরণ: ইউনিয়ন

#include <iostream>
using namespace std;

// Data নামক একটি ইউনিয়ন ঘোষণা করা
union Data {
    int intValue;
    float floatValue;
    char charValue;
};

int main() {
    // Data ইউনিয়নের একটি অবজেক্ট তৈরি করা
    Data data;

    // মেম্বার সেট এবং প্রিন্ট করা
    data.intValue = 10;
    cout << "Integer Value: " << data.intValue << endl;

    data.floatValue = 3.14;
    cout << "Float Value: " << data.floatValue << endl;

    data.charValue = 'A';
    cout << "Char Value: " << data.charValue << endl;

    return 0;
}

বর্ণনা:

  • এখানে Data নামে একটি ইউনিয়ন তৈরি করা হয়েছে, যার মধ্যে intValue, floatValue, এবং charValue নামে তিনটি মেম্বার রয়েছে।
  • ইউনিয়নটি একসঙ্গে সব মেম্বারকে মেমোরি বরাদ্দ না করে, একসঙ্গে শুধুমাত্র একটির মেমোরি বরাদ্দ করে, ফলে সর্বশেষ মানটিই কেবল সংরক্ষিত থাকে।

ইউনিয়নের বৈশিষ্ট্য

  1. একটি মেম্বার ব্যবহৃত হয়: ইউনিয়নে এক সময়ে কেবলমাত্র একটি মেম্বারের মান ধারণ করা যায়।
  2. সবচেয়ে বড় মেম্বারের মেমোরি বরাদ্দ: ইউনিয়নের আকার সবচেয়ে বড় মেম্বারের মেমোরির সমান হয়।
  3. মেমোরি সাশ্রয়ী: ইউনিয়ন কম মেমোরি ব্যবহার করে, কারণ একসঙ্গে একটি মাত্র মেম্বারের মেমোরি বরাদ্দ থাকে।

স্ট্রাকচার বনাম ইউনিয়ন

বৈশিষ্ট্যস্ট্রাকচার (Structure)ইউনিয়ন (Union)
মেম্বার মেমোরিপ্রতিটি মেম্বারের নিজস্ব মেমোরি বরাদ্দ থাকেসব মেম্বার একটি মেমোরি ভাগাভাগি করে
আকারসব মেম্বারের মেমোরি যোগফলের সমানসবচেয়ে বড় মেম্বারের মেমোরির সমান
মেম্বার অ্যাক্সেসএকসঙ্গে একাধিক মেম্বার অ্যাক্সেস করা যায়এক সময়ে একটি মাত্র মেম্বার অ্যাক্সেস করা যায়
মেমোরি ব্যবহারের উদ্দেশ্যবেশি মেমোরি বরাদ্দকৃতকম মেমোরি বরাদ্দকৃত

কবে স্ট্রাকচার এবং ইউনিয়ন ব্যবহার করবেন?

  • স্ট্রাকচার ব্যবহার করবেন যখন একই সময়ে একাধিক মেম্বারের মান সংরক্ষণ ও ব্যবহারের প্রয়োজন হবে এবং প্রতিটি মেম্বারের নিজস্ব মেমোরি বরাদ্দ প্রয়োজন হবে।
  • ইউনিয়ন ব্যবহার করবেন যখন একবারে একাধিক মেম্বারের মান সংরক্ষণের প্রয়োজন নেই এবং মেমোরি সাশ্রয়ী হওয়া দরকার।

সংক্ষেপে

  • স্ট্রাকচার হলো এমন একটি ডেটা স্ট্রাকচার, যা একই সময়ে একাধিক মেম্বারের মেমোরি বরাদ্দ করে।
  • ইউনিয়ন হলো এমন একটি ডেটা স্ট্রাকচার, যা একসঙ্গে শুধুমাত্র একটি মেম্বারের মেমোরি বরাদ্দ করে।
  • স্ট্রাকচার ও ইউনিয়ন C++ এ ডেটা সংরক্ষণের এবং মেমোরি ব্যবহারের ক্ষেত্রে ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়।
common.content_added_by

স্ট্রাকচার কী এবং এর ব্যবহার

271
271

স্ট্রাকচার (Structure) C++ এর একটি ডেটা স্ট্রাকচার, যা বিভিন্ন ডেটা টাইপের ডেটা মেম্বার বা ভ্যারিয়েবলকে একত্রে সংরক্ষণ করতে ব্যবহৃত হয়। স্ট্রাকচার ব্যবহার করে একটি ডেটা টাইপের মধ্যে একাধিক ডেটা মেম্বারকে গ্রুপ করা যায়, যা কোডিংয়ে আরও সুবিধা প্রদান করে।

স্ট্রাকচার ঘোষণা

C++ এ struct কীওয়ার্ড ব্যবহার করে স্ট্রাকচার ঘোষণা করা হয়। স্ট্রাকচার ঘোষণার মধ্যে বিভিন্ন ডেটা মেম্বার (যেমন ইন্টিজার, ফ্লোট, স্ট্রিং ইত্যাদি) সংজ্ঞায়িত করা হয়।

উদাহরণ

#include <iostream>
using namespace std;

// স্ট্রাকচার ঘোষণা
struct Person {
    string name;
    int age;
    float height;
};

int main() {
    // স্ট্রাকচার অবজেক্ট তৈরি
    Person person1;

    // ডেটা মেম্বার অ্যাসাইন করা
    person1.name = "John Doe";
    person1.age = 25;
    person1.height = 5.9;

    // ডেটা মেম্বার প্রদর্শন
    cout << "Name: " << person1.name << endl;
    cout << "Age: " << person1.age << endl;
    cout << "Height: " << person1.height << endl;

    return 0;
}

বর্ণনা:

  • এখানে Person নামে একটি স্ট্রাকচার ঘোষণা করা হয়েছে, যাতে name, age, এবং height নামে তিনটি ডেটা মেম্বার রয়েছে।
  • person1 নামে Person স্ট্রাকচারের একটি অবজেক্ট তৈরি করা হয়েছে এবং এতে মান অ্যাসাইন করে প্রদর্শন করা হয়েছে।

স্ট্রাকচারের ব্যবহার

স্ট্রাকচার ব্যবহার করে বিভিন্ন ডেটা টাইপ একসাথে সংরক্ষণ এবং পরিচালনা করা যায়। এটি বিশেষ করে যখন একাধিক ডেটা টাইপের ডেটা একত্রে সংরক্ষণ করতে হয় তখন কার্যকরী।

উদাহরণ: একাধিক স্ট্রাকচার অবজেক্ট তৈরি

#include <iostream>
using namespace std;

struct Book {
    string title;
    string author;
    int pages;
};

int main() {
    Book book1 = {"The Catcher in the Rye", "J.D. Salinger", 277};
    Book book2 = {"To Kill a Mockingbird", "Harper Lee", 324};

    cout << "Book 1 Title: " << book1.title << ", Author: " << book1.author << ", Pages: " << book1.pages << endl;
    cout << "Book 2 Title: " << book2.title << ", Author: " << book2.author << ", Pages: " << book2.pages << endl;

    return 0;
}

বর্ণনা:

  • এখানে Book নামের একটি স্ট্রাকচার তৈরি করা হয়েছে, যা title, author, এবং pages ডেটা মেম্বার ধারণ করে।
  • book1 এবং book2 নামে দুটি স্ট্রাকচার অবজেক্ট তৈরি করা হয়েছে এবং তাদের মান প্রদর্শন করা হয়েছে।

ফাংশনে স্ট্রাকচার পাস করা

স্ট্রাকচারকে প্যারামিটার হিসেবে ফাংশনে পাস করা যায়। এটি পাস-বাই-ভ্যালু এবং পাস-বাই-রেফারেন্স উভয়ভাবেই করা যেতে পারে।

উদাহরণ: পাস-বাই-ভ্যালু

#include <iostream>
using namespace std;

struct Person {
    string name;
    int age;
};

void displayPerson(Person p) {
    cout << "Name: " << p.name << ", Age: " << p.age << endl;
}

int main() {
    Person person1 = {"Alice", 30};
    displayPerson(person1);

    return 0;
}

উদাহরণ: পাস-বাই-রেফারেন্স

#include <iostream>
using namespace std;

struct Person {
    string name;
    int age;
};

void modifyPerson(Person &p) {
    p.age += 1; // বয়স এক বছর বৃদ্ধি করা
}

int main() {
    Person person1 = {"Bob", 40};
    cout << "Before modification: " << person1.age << endl;

    modifyPerson(person1);
    cout << "After modification: " << person1.age << endl;

    return 0;
}

বর্ণনা:

  • পাস-বাই-ভ্যালু: এখানে Person অবজেক্ট displayPerson() ফাংশনে পাস করা হয়েছে এবং কেবলমাত্র এর কপি ব্যবহার করা হয়েছে।
  • পাস-বাই-রেফারেন্স: এখানে modifyPerson() ফাংশনে Person অবজেক্ট রেফারেন্স হিসেবে পাস করা হয়েছে এবং এর মান পরিবর্তন করা হয়েছে।

স্ট্রাকচারের মধ্যে অ্যারের ব্যবহার

স্ট্রাকচারের মধ্যে অ্যারে ব্যবহার করে একাধিক মান সংরক্ষণ করা যায়।

#include <iostream>
using namespace std;

struct Student {
    string name;
    int marks[5];
};

int main() {
    Student student1 = {"Alice", {85, 90, 78, 88, 92}};

    cout << "Student Name: " << student1.name << endl;
    cout << "Marks: ";
    for (int i = 0; i < 5; i++) {
        cout << student1.marks[i] << " ";
    }
    cout << endl;

    return 0;
}

বর্ণনা:

  • এখানে Student স্ট্রাকচারের মধ্যে marks নামে একটি ইন্টিজার অ্যারে ব্যবহার করা হয়েছে, যা ৫টি বিষয়ের মার্ক্স ধারণ করে।

স্ট্রাকচারের সুবিধা

১. ডেটা গ্রুপিং: বিভিন্ন ধরনের ডেটা একত্রে সংরক্ষণ করা যায়। ২. সহজ ডেটা মডেলিং: একই ধরনের একাধিক অবজেক্ট তৈরি করা যায়, যা রিয়েল-ওয়ার্ল্ড এন্টিটির মডেলিংয়ে সহায়ক। ৩. সহজ ব্যবহার: সহজেই ফাংশনে পাস করা যায় এবং প্রোগ্রামকে আরও পরিষ্কার ও সংগঠিত রাখে।

স্ট্রাকচার বনাম ক্লাস

বৈশিষ্ট্যস্ট্রাকচারক্লাস
অ্যাক্সেস স্পেসিফায়ারডিফল্টভাবে publicডিফল্টভাবে private
ইনহেরিটেন্সসাধারণত ইনহেরিটেন্স সমর্থন করে নাইনহেরিটেন্স সমর্থন করে
মেম্বার ফাংশনস্ট্রাকচারে মেম্বার ফাংশন থাকতে পারেক্লাসে মেম্বার ফাংশন থাকে

সারসংক্ষেপ

  • স্ট্রাকচার হলো বিভিন্ন ডেটা মেম্বারকে একটি একক ইউনিটে গ্রুপ করার একটি পদ্ধতি।
  • এটি ডেটা মডেলিংয়ে সহায়ক এবং প্রোগ্রামে সহজ ডেটা ম্যানেজমেন্টে ব্যবহার করা যায়।
  • স্ট্রাকচারের মধ্যে মেম্বার ফাংশন, অ্যারে, এবং ফাংশনে পাস করা যায়।

স্ট্রাকচার C++ এ ডেটা সংরক্ষণ ও সংগঠিত করার একটি কার্যকর উপায়, যা বড় প্রোগ্রামিং প্রকল্পে ডেটা ম্যানেজমেন্ট সহজ করে।

common.content_added_by

ইউনিয়ন এবং এর ব্যবহার

256
256

ইউনিয়ন (Union) হলো C++ এর একটি ডেটা স্ট্রাকচার, যা একাধিক ডেটা মেম্বার ধারণ করতে পারে, তবে একই সময়ে কেবলমাত্র একটি মেম্বারের জন্য মেমোরি বরাদ্দ করা হয়। অর্থাৎ, একটি ইউনিয়ন একাধিক ধরনের ডেটা রাখার ক্ষমতা রাখে, কিন্তু একই সময়ে শুধুমাত্র একটি মেম্বার সক্রিয় থাকে। ইউনিয়নের প্রতিটি মেম্বার একই মেমোরি লোকেশন ভাগ করে নেয়, ফলে সর্বশেষ সেট করা মানই ইউনিয়নের মধ্যে সংরক্ষিত থাকে।

ইউনিয়ন কেন ব্যবহার করা হয়?

  • মেমোরি সাশ্রয়ী: ইউনিয়ন একাধিক মেম্বারের জন্য একই মেমোরি ব্যবহার করে, তাই এটি মেমোরি সাশ্রয়ী।
  • বিভিন্ন ধরনের ডেটা সংরক্ষণ: বিভিন্ন ধরনের ডেটা একসঙ্গে রাখতে সক্ষম, তবে একসঙ্গে একাধিক মেম্বারের মান ধরে রাখতে পারে না।
  • ভিন্ন ভিন্ন অর্থে একটি ডেটা রাখার প্রয়োজন: বিশেষত এমবেডেড সিস্টেম বা হার্ডওয়্যার সংক্রান্ত প্রোগ্রামিংয়ে, যেখানে মেমোরি সীমাবদ্ধ থাকে, ইউনিয়ন ব্যবহার করা হয়।

ইউনিয়ন ঘোষণা এবং ব্যবহার

ইউনিয়ন ঘোষণা

union UnionName {
    data_type member1;
    data_type member2;
    // অন্যান্য মেম্বার
};

উদাহরণ: ইউনিয়ন ব্যবহার

#include <iostream>
using namespace std;

// Data নামক একটি ইউনিয়ন ঘোষণা করা
union Data {
    int intValue;
    float floatValue;
    char charValue;
};

int main() {
    // Data ইউনিয়নের একটি অবজেক্ট তৈরি করা
    Data data;

    // মেম্বার সেট এবং প্রিন্ট করা
    data.intValue = 10;
    cout << "Integer Value: " << data.intValue << endl;

    data.floatValue = 3.14;
    cout << "Float Value: " << data.floatValue << endl;

    data.charValue = 'A';
    cout << "Char Value: " << data.charValue << endl;

    return 0;
}

আউটপুট:

Integer Value: 10
Float Value: 3.14
Char Value: A

বর্ণনা:

  • এখানে Data নামে একটি ইউনিয়ন তৈরি করা হয়েছে, যার মধ্যে intValue, floatValue, এবং charValue নামে তিনটি মেম্বার রয়েছে।
  • যেহেতু ইউনিয়ন সব মেম্বারকে একত্রে মেমোরি বরাদ্দ করে না, তাই সর্বশেষ মেম্বার সেট করার পর পুরোনো মানটি সংরক্ষিত থাকে না।

ইউনিয়ন এবং মেমোরি

ইউনিয়নের আকার তার সবচেয়ে বড় মেম্বারের আকারের সমান।

উদাহরণ: মেমোরি সাইজ নির্ণয়

#include <iostream>
using namespace std;

union Data {
    int intValue;
    float floatValue;
    double doubleValue;
};

int main() {
    cout << "Size of int: " << sizeof(int) << endl;
    cout << "Size of float: " << sizeof(float) << endl;
    cout << "Size of double: " << sizeof(double) << endl;
    cout << "Size of union Data: " << sizeof(Data) << endl;

    return 0;
}

আউটপুট:

Size of int: 4
Size of float: 4
Size of double: 8
Size of union Data: 8

বর্ণনা:

  • এখানে Data ইউনিয়নে intValue, floatValue, এবং doubleValue নামে তিনটি মেম্বার রয়েছে।
  • Data ইউনিয়নের আকার হলো তার সবচেয়ে বড় মেম্বার doubleValue এর আকারের সমান, অর্থাৎ ৮ বাইট।

ইউনিয়নের ব্যবহারিক উদাহরণ

উদাহরণ: ইউনিয়ন দিয়ে ডেটা টাইপ শনাক্তকরণ

#include <iostream>
using namespace std;

union Data {
    int intValue;
    float floatValue;
};

struct Container {
    Data data;
    bool isInt; // true হলে intValue ধারন করছে, false হলে floatValue ধারন করছে
};

int main() {
    Container container;
    
    container.data.intValue = 50;
    container.isInt = true;
    
    if (container.isInt) {
        cout << "Integer Value: " << container.data.intValue << endl;
    } else {
        cout << "Float Value: " << container.data.floatValue << endl;
    }

    container.data.floatValue = 3.5;
    container.isInt = false;

    if (container.isInt) {
        cout << "Integer Value: " << container.data.intValue << endl;
    } else {
        cout << "Float Value: " << container.data.floatValue << endl;
    }

    return 0;
}

বর্ণনা:

  • এখানে Container নামের একটি স্ট্রাকচার ব্যবহার করে ডেটা টাইপ শনাক্ত করা হয়েছে, যাতে ইউনিয়নের intValue অথবা floatValue কোনটি বর্তমানে অ্যাক্সেসযোগ্য তা জানা যায়।
  • isInt ফ্ল্যাগ ব্যবহার করে নির্ধারণ করা হয়েছে যে data ইউনিয়নের মধ্যে বর্তমানে intValue সংরক্ষিত কিনা।

ইউনিয়নের সুবিধা এবং অসুবিধা

সুবিধা

  1. মেমোরি সাশ্রয়ী: ইউনিয়ন কম মেমোরি ব্যবহার করে কারণ এটি একসঙ্গে একটি মেম্বারের মেমোরি বরাদ্দ করে।
  2. বিভিন্ন ধরনের ডেটা সংরক্ষণ: একাধিক মেম্বার রাখতে সক্ষম, যদিও একই সময়ে একটি মাত্র মেম্বার সক্রিয় থাকে।

অসুবিধা

  1. একই সময়ে একাধিক মেম্বার ধরে রাখতে পারে না: ইউনিয়নের মধ্যে একবারে একটি মাত্র মেম্বার সংরক্ষণ করা যায়।
  2. শেষ মেম্বারই কেবল সংরক্ষিত থাকে: যেহেতু সব মেম্বার একই মেমোরি শেয়ার করে, তাই সর্বশেষ সেট করা মেম্বারের মানই বিদ্যমান থাকে।

সারসংক্ষেপ

  • ইউনিয়ন হলো C++ এ একটি ডেটা স্ট্রাকচার, যা একসঙ্গে বিভিন্ন ধরনের ডেটা রাখতে পারে, তবে একসঙ্গে কেবলমাত্র একটি মেম্বারের জন্য মেমোরি বরাদ্দ করে।
  • ইউনিয়ন মেমোরি সাশ্রয়ী, এবং এটি বিশেষত এমবেডেড সিস্টেমে ব্যবহার করা হয়।
  • যেহেতু ইউনিয়ন একসঙ্গে একাধিক মেম্বার ধারণ করতে পারে না, তাই এটি ব্যবহারে সতর্ক থাকা প্রয়োজন।

ইউনিয়ন বিশেষ ক্ষেত্রে কার্যকরী এবং মেমোরি ব্যবহারে গুরুত্বপূর্ণ ভূমিকা পালন করে।

common.content_added_by

স্ট্রাকচার এবং পয়েন্টার

254
254

C++ এ স্ট্রাকচার এবং পয়েন্টার একসাথে ব্যবহার করে স্ট্রাকচারের ডেটা মেম্বারে সহজে অ্যাক্সেস করা যায়। স্ট্রাকচারের অবজেক্টের ঠিকানা ধারণ করতে পয়েন্টার ব্যবহার করা যেতে পারে, এবং সেই ঠিকানা ব্যবহার করে স্ট্রাকচারের সদস্যদের অ্যাক্সেস করা যায়।

স্ট্রাকচারের পয়েন্টার ঘোষণা

স্ট্রাকচারের পয়েন্টার ঘোষণা করার সময় struct কিওয়ার্ডের সাথে পয়েন্টার চিহ্ন * ব্যবহার করা হয়। উদাহরণস্বরূপ:

struct Person {
    string name;
    int age;
};

Person *ptr; // Person স্ট্রাকচারের একটি পয়েন্টার

স্ট্রাকচারের পয়েন্টার ব্যবহার

স্ট্রাকচারের পয়েন্টার ব্যবহার করে স্ট্রাকচারের ডেটা মেম্বার অ্যাক্সেস করার জন্য -> (arrow) অপারেটর ব্যবহার করা হয়।

উদাহরণ: স্ট্রাকচারের পয়েন্টার ব্যবহার

#include <iostream>
using namespace std;

struct Person {
    string name;
    int age;
};

int main() {
    Person person1 = {"Alice", 25}; // একটি স্ট্রাকচার অবজেক্ট তৈরি করা
    Person *ptr = &person1; // person1 এর ঠিকানা ptr এ রাখা হলো

    // পয়েন্টার ব্যবহার করে স্ট্রাকচারের মেম্বার অ্যাক্সেস করা
    cout << "Name: " << ptr->name << endl; // Output: Name: Alice
    cout << "Age: " << ptr->age << endl;   // Output: Age: 25

    // পয়েন্টার ব্যবহার করে মান পরিবর্তন করা
    ptr->age = 26;
    cout << "Updated Age: " << person1.age << endl; // Output: Updated Age: 26

    return 0;
}

বর্ণনা:

  • এখানে person1 নামের একটি Person স্ট্রাকচারের অবজেক্ট তৈরি করা হয়েছে, এবং ptr নামের একটি পয়েন্টার person1 এর ঠিকানা ধরে রেখেছে।
  • ptr->name এবং ptr->age ব্যবহার করে name এবং age মেম্বার অ্যাক্সেস করা হয়েছে।
  • পয়েন্টারের মাধ্যমে age মেম্বারের মান পরিবর্তন করা হয়েছে।

ডাইনামিক্যালি মেমোরি বরাদ্দ এবং স্ট্রাকচারের পয়েন্টার

C++ এ new অপারেটর ব্যবহার করে স্ট্রাকচারের জন্য ডাইনামিক্যালি মেমোরি বরাদ্দ করা যায় এবং পয়েন্টারের মাধ্যমে সেই মেম্বারগুলিকে অ্যাক্সেস করা যায়।

উদাহরণ: ডাইনামিক মেমোরি বরাদ্দ এবং স্ট্রাকচারের পয়েন্টার ব্যবহার

#include <iostream>
using namespace std;

struct Person {
    string name;
    int age;
};

int main() {
    // ডাইনামিক্যালি Person স্ট্রাকচারের মেমোরি বরাদ্দ
    Person *ptr = new Person;

    // মেম্বার ফিল্ডে মান অ্যাসাইন করা
    ptr->name = "Bob";
    ptr->age = 30;

    // মান প্রদর্শন করা
    cout << "Name: " << ptr->name << endl; // Output: Name: Bob
    cout << "Age: " << ptr->age << endl;   // Output: Age: 30

    // মেমোরি মুক্ত করা
    delete ptr;

    return 0;
}

বর্ণনা:

  • এখানে new অপারেটর ব্যবহার করে Person স্ট্রাকচারের জন্য ডাইনামিক্যালি মেমোরি বরাদ্দ করা হয়েছে এবং ptr নামের একটি পয়েন্টার সেটির ঠিকানা ধারণ করছে।
  • ptr->name এবং ptr->age ব্যবহার করে মেম্বার ফিল্ডে মান অ্যাসাইন করা হয়েছে এবং প্রদর্শন করা হয়েছে।
  • delete অপারেটর ব্যবহার করে ডাইনামিক্যালি বরাদ্দকৃত মেমোরি মুক্ত করা হয়েছে।

অ্যারে অফ স্ট্রাকচারের পয়েন্টার

পয়েন্টার ব্যবহার করে স্ট্রাকচারের অ্যারে তৈরি করা যায় এবং সেই অ্যারের প্রতিটি উপাদানে অ্যাক্সেস করা সম্ভব।

উদাহরণ: অ্যারে অফ স্ট্রাকচারের পয়েন্টার

#include <iostream>
using namespace std;

struct Person {
    string name;
    int age;
};

int main() {
    // 3টি স্ট্রাকচার অবজেক্টের জন্য মেমোরি বরাদ্দ
    Person *persons = new Person[3];

    // প্রতিটি অবজেক্টের মেম্বার সেট করা
    persons[0].name = "Alice";
    persons[0].age = 25;

    persons[1].name = "Bob";
    persons[1].age = 30;

    persons[2].name = "Charlie";
    persons[2].age = 35;

    // অবজেক্টের তথ্য প্রদর্শন
    for (int i = 0; i < 3; i++) {
        cout << "Person " << i + 1 << " - Name: " << persons[i].name << ", Age: " << persons[i].age << endl;
    }

    // মেমোরি মুক্ত করা
    delete[] persons;

    return 0;
}

বর্ণনা:

  • এখানে Person স্ট্রাকচারের একটি অ্যারে ডাইনামিক্যালি তৈরি করা হয়েছে, যার আকার ৩।
  • প্রতিটি অবজেক্টের name এবং age মেম্বারে আলাদা আলাদা মান সেট করা হয়েছে।
  • for লুপ ব্যবহার করে প্রতিটি অবজেক্টের তথ্য প্রদর্শন করা হয়েছে।
  • অবশেষে delete[] অপারেটর ব্যবহার করে ডাইনামিক্যালি বরাদ্দকৃত মেমোরি মুক্ত করা হয়েছে।

সারসংক্ষেপ

  • স্ট্রাকচারের পয়েন্টার ব্যবহার করে স্ট্রাকচারের ডেটা মেম্বার সহজেই অ্যাক্সেস এবং ম্যানিপুলেট করা যায়।
  • পয়েন্টারের মাধ্যমে স্ট্রাকচারের জন্য ডাইনামিক্যালি মেমোরি বরাদ্দ করা সম্ভব।
  • স্ট্রাকচারের জন্য অ্যারে অফ পয়েন্টার তৈরি করে একই ধরনের একাধিক ডেটা মেম্বার পরিচালনা করা যায়।

স্ট্রাকচারের সাথে পয়েন্টার ব্যবহার প্রোগ্রামিংয়ে মেমোরি ব্যবস্থাপনা এবং ডেটা ম্যানেজমেন্টকে সহজতর করে, যা বড় প্রোগ্রামে কার্যকর।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion